$(function(){

	var leaf_id = "0";
	
// Напоминание о выборе строки
	function selRowPlease() {
		app.alert('AlertDlg', 'Внимание', "Пожалуйста, выберите строку в таблице.", 'app-icon-stop32');
	}
	function selLeafPlease() {
		app.alert('AlertDlg', 'Внимание', "Пожалуйста, выберите группу/подгруппу.", 'app-icon-stop32');
	}
	

    function GetUniLeaf(area_id, caller) {
		var area = $('#'+area_id);
		var vdiv = area_id+'Tab';

		area.html('<div id="'+vdiv+'Pager"></div><table id="'+vdiv+'"></table>');

		var pager_id = '#' + vdiv + 'Pager';
        var pager = $(pager_id);
		
        var el_met_id;
        var el_met_name;
        var met_name = '';
		
        var el_met_opt_id;
        var el_met_opt_name;
        var met_opt_name = '';
		
		var edit_div = 'div#editmod' + vdiv;

        var gritab;
        var col_order = [0, 1, 2, 3, 4, 5, 6, 7, 8];
        var col_names = ['ID', 'Гр.ID', 'Шифр', 'Полное описание', 'Метрика ID', 'Метрика', 'Доп.метрика ID', 'Доп.метр.', 'Множитель' ];
        var col_model = [
		    { name: 'id', index: 'uni_id', hidden: true, width: 1, editable: false, fixed: true },
		    { name: 'uni_leaf_id', index: 'uni_leaf_id', width: 50, editable: false },
		    { name: 'uni_name', index: 'uni_name', hidden: false, width: 90, editable: true, 
                    editoptions: { maxlength: "16", style: "width:250px;"}, 
					formoptions: { label: '<div class="jqg-form-label">Шифр</div>'}
			},					
		    { name: 'uni_full', index: 'uni_full', hidden: false, width: 360, editable: true, edittype: 'textarea',
                    editoptions: { maxlength: "255", style: "width:252px; height:50px; resize:none;"}, 
					formoptions: { label: '<div class="jqg-form-label">Описание</div>'} 
			},					
		    { name: 'uni_met_id', index: 'uni_met_id', hidden: true, width: 1, editable: true, 
                    editoptions: { maxlength: "16", dataInit: function (el) { el_met_id = el; } } 
			}, 					
		    { name: 'met_name', index: 'met_name', hidden: false, width: 80, editable: true,
		        editoptions: { maxlength: "16", style: "width:250px;", dataInit: function (el) { el_met_name = el; } },
				formoptions: { label: '<div class="jqg-form-label">Метрика</div>'}
		    },			
		    { name: 'uni_met_opt_id', index: 'uni_met_opt_id', hidden: true, width: 1, editable: true, 
                    editoptions: { maxlength: "16", dataInit: function (el) { el_met_opt_id = el; } }
			}, 		
		    { name: 'met_opt_name', index: 'met_opt_name', hidden: false, width: 80, editable: true,
		        editoptions: { maxlength: "16", style: "width:250px;", dataInit: function (el) { el_met_opt_name = el; } },
				formoptions: { label: '<div class="jqg-form-label">Доп.метрика</div>'}
		    },			
		    { name: 'uni_met_mul', index: 'uni_met_mul', hidden: false, width: 80, editable: true, 
                    editoptions: { maxlength: "16", style: "width:250px;"}, 
					formoptions: { label: '<div class="jqg-form-label">Множитель</div>'} 
			}					
        ];
        var jqgo = {
            url: 'index.php',
            editurl: 'index.php',
            datatype: 'json',
            postData: { q: 'unity' },
            emptyrecords: true,
            autowidth: false,
            gridview: true,
            hidegrid: false,
            hoverrows: true,
            recordpos: 'right',
            scrollrows: true,
            multiselect: true,
            multiselectWidth: 25,
            multiboxonly: true,
            mtype: 'POST',
            shrinkToFit: false,
            colNames: col_names,
            colModel: col_model,
            page: 1,
            pager: pager,
            pagerpos: 'right',
            rowNum: 15,
            rowList: [15, 45, 150],
            loadui: 'disable',
            toolbar: [false, 'top'],
            filterbar: false,
            height: area.innerHeight() - 75,
            width: area.innerWidth() - 2,
            sortname: 'uni_name',
            sortorder: 'asc',
            sortable: true,
            caption: '',
            loadError: function (xhr, status, error) {
                alert("Ошибка загрузки даных");
            },
            loadComplete: function (data) {
                switch( data.userdata.errcode ) {
                    case 0:
                        break;
                    case 999:    
                        alert("Ваша сессия закончилась по таймауту.\nПожалуйста перерегистрируйтесь.");
                        break;
                    case 99:    
                        app.alert('AlertDlg', 'Ошибка', data.userdata.errmess, 'app-icon-stop32', caller.Close );
                        break;
                    default:
                        alert( data.userdata.errmess );
                        break;
                }                
            },
			beforeRequest: function() {
				$('#' + vdiv).jqGrid('setGridParam',{postData:{'leaf_id':leaf_id} });
			},
            ondblClickRow: function (id) {
                $('#' + vdiv).jqGrid('editGridRow', id,
                {
					width: 400,
                    modal: true,
                    jqModal: true,
                    zIndex: app.jqgrid_form_min_z_index,
					resize: false,
//                    closeOnEscape: true,
                    editData: { q: 'unity/update' },
					onInitializeForm: function( fm ) {
						$(fm).prepend('<style type="text/css">.ui-autocomplete {max-width:252px;}</style>'); },
                    afterShowForm: onShowEditForm,
                    afterSubmit: responseOnSubmit,
                    viewPagerButtons: false,
                    closeAfterEdit: true,
					onClose: onCloseEditForm
                }
                );
            }
        };

// Создадим jqGrid
        gritab = $('#' + vdiv).jqGrid(jqgo);

// Индикация ошибок при вводе, ред., удал.
        function TestNewData(post, formid) {
            var result = true, mess = '';
/*			
            if( post.uni_met_id == '' || post.met_name == '' || met_name == '' || post.met_name != met_name ) {
				post.uni_met_id = post.met_name = ''
				$(el_met_id).val(''); $(el_met_name).val(''); met_name = '';
			}
			
            if( post.uni_met_opt_id == '' || post.met_opt_name == '' || met_opt_name == '' || post.met_opt_name != met_opt_name ) {
				post.uni_met_opt_id = post.met_opt_name = '';
				$(el_met_opt_id).val(''); $(el_met_opt_name).val(''); met_opt_name = '';
			}
			
			if( post.uni_name == '' || post.uni_full == '' || post.uni_met_id == '' || 
				( post.uni_met_opt_id != '' && post.uni_met_mull == '') || ( post.uni_met_opt_id == '' && post.uni_met_mull != '')) {
                result = false;
                mess = 'Данные введены с ошибками !!!';
            }
*/
            return[result,mess];
        }
        
// Индикация серверных ошибок добавления, ред., удал.
        function responseOnSubmit(response, postdata) {
            var rsp = $.parseJSON(response.responseText);
            var success = true;
            var msg = '';

            if (rsp.errcode) {
                success = false;
                msg = rsp.errmess;
            }
				
            return [success, msg];
        }

		function onShowEditForm(fm) {
			SetMetHack();
			SetMetOptHack();
            $(edit_div).css({'overflow':'visible'}).shadow();
		}
		        
		function onCloseEditForm() {
			$(el_met_name).autocomplete( "destroy" ).unbind();
			$(el_met_opt_name).autocomplete( "destroy" ).unbind();
			return true;
		}
		
// Напоминание о выборе строки
		function selRowPlease() {
			app.alert('AlertDlg', 'Внимание', "Пожалуйста, выберите строку в таблице.", 'app-icon-stop32');
		}
	
// Навигатор - создаем панель инструментов
        gritab.jqGrid('navGrid', pager_id, {
				add:false,del:false,edit:false,view:false,search:false,refresh:false });
        
// Пользовательский навигатор - создать
        gritab.jqGrid('navButtonAdd', pager_id, {
            caption: 'Создать',
            title: 'Создать запись',
            buttonicon: 'ui-icon-plus',
            onClickButton: function() { 
				if( leaf_id == '0' ) { selLeafPlease(); return; }
				gritab.jqGrid('editGridRow', 'new', {
					width: 400,
					resize: false,
                    modal: true,
                    jqModal: true,
					zIndex: app.jqgrid_form_min_z_index,
//                    closeOnEscape: true,
                    editData: { q: 'unity/insert', leaf_id: function() { return leaf_id; } },
					onInitializeForm: function( fm ) {
						$(fm).prepend('<style type="text/css">.ui-autocomplete {max-width:252px;}</style>'); },
                    afterShowForm: onShowEditForm,
                    afterSubmit: responseOnSubmit,
                    closeAfterAdd: false,
					onClose: onCloseEditForm
				});
			}
        });

// Пользовательский навигатор - редактирование
        gritab.jqGrid('navButtonAdd', pager_id, {
            caption: 'Изменить',
            title: 'Редактировать выбранную запись',
            buttonicon: 'ui-icon-pencil',
            onClickButton: function() { 
				var curr_id = gritab.getGridParam('selrow');
				if( !curr_id ) { selRowPlease(); return; }
				gritab.jqGrid('editGridRow', curr_id, {
					width: 400,
					resize: false,
                    modal: true,
                    jqModal: true,
					zIndex: app.jqgrid_form_min_z_index,
//                    closeOnEscape: true,
                    editData: { q: 'unity/update' },
					onInitializeForm: function( fm ) {
						$(fm).prepend('<style type="text/css">.ui-autocomplete {max-width:252px;}</style>'); },
                    afterShowForm: onShowEditForm,
                    afterSubmit: responseOnSubmit,
 					beforeSubmit: TestNewData, 
					viewPagerButtons: false,
                    closeAfterEdit: true,
					onClose: onCloseEditForm
				});
			}
        });
// Пользовательский навигатор - удаление
        gritab.jqGrid('navButtonAdd', pager_id, {
            caption: 'Удалить',
            title: 'Удаление выбранной записи',
            buttonicon: 'ui-icon-trash',
            onClickButton: function() { 
				var rowlist = gritab.getGridParam('selarrrow').toString();
				if( !rowlist ) { selRowPlease(); return; }
				gritab.jqGrid('delGridRow', rowlist, {
                    modal: true,
                    jqModal: true,
                    width: 270,
					msg: '<table style="width:250px;margin-top:16px;"><tr><td style="width:50px;">'+
							'<div class="app-icon-quest32"></div></td><td>Удалить выбранную запись(и) ?</td></tr></table>',
					resize: false,
					zIndex: app.jqgrid_form_min_z_index,
                    closeOnEscape: true,
                    delData: { q: 'unity/delete' },
                    afterShowForm: function() { $('div#delmod' + vdiv).shadow(); },
                    afterSubmit: responseOnSubmit
				});
			}
        });
// Пользовательский навигатор - просмотр
        gritab.jqGrid('navButtonAdd', pager_id, {
            caption: 'Просмотр',
            title: 'Показать в виде формы',
            buttonicon: 'ui-icon-document',
            onClickButton: function() { 
				var curr_id = gritab.getGridParam('selrow');
				if( !curr_id ) { selRowPlease(); return; }
				gritab.jqGrid('viewGridRow', curr_id, {
					width: 400,
					resize: true,
                    modal: true,
                    jqModal: true,
					zIndex: app.jqgrid_form_min_z_index,
                    closeOnEscape: true,
                    viewPagerButtons: false,
					labelswidth: '35%',
					beforeShowForm: function(fm) { 
						$(fm).find("table:first td").css({'white-space':'normal','vertical-align':'top'});
						$('div#viewmod' + vdiv).shadow(); 
					}
				});
			}
        });
// Пользовательский навигатор - обновить
		gritab.jqGrid('navButtonAdd',pager_id,{
			caption: 'Обновить',
			title: 'Обновить таблицу',
			buttonicon: 'ui-icon-refresh',
			onClickButton: function() { 	gritab.trigger("reloadGrid"); }
		});    

// Пользовательский навигатор - переместить
		gritab.jqGrid('navButtonAdd',pager_id,{
			caption: 'Переместить',
			title: 'Переместить записи в другую группу',
			buttonicon: 'ui-icon-copy',
			onClickButton: MoveToOtherLeaf
		});    

// Делаем ширину панели кнопок максимальной
		$('td#'+area_id+'TabPager_center').width(2);
		
        gritab.filterToolbar({ searchOnEnter: false, afterSearch: function () { } });

        function SetMetHack() {
            $(el_met_name).autocomplete({
				html: true,
				appendTo: edit_div,
                source: function (request, responce) {
                    $.post('index.php', { q: 'metrics/find', term: request.term },
                    function (rsp, textStatus) {
                        if (rsp.errcode) {
                            if (rsp.errcode == '999') { alert(rsp.errmess); }
                            else app.alert('AlertDlg', 'Ошибка', rsp.errmess, 'app-icon-stop32');
                            responce();
                            return;
                        }
                        if (rsp.data) {
                            responce($.map(rsp.data, function (item) {
                                return { label: item.name + ' ( '+item.full+' )', 
										value:item.value, name:item.name }
                            }));
                            return;
                        }
                        responce();
                    }, 
                    'json');
                },
                minLength: 1, autoFocus: true,
                focus: function (event, ui) { return false; },
                select: function (event, ui) {
                    $(el_met_id).val(ui.item.value);
                    met_name = ui.item.name.replace(/<(b|\/b)>/g,'');
                    $(el_met_name).val(met_name);
                    return false;
                }
            });
			met_name = $(el_met_name).val();
            $(el_met_name).bind( 'focusout', function () { 
                if( $(el_met_name).val() != met_name ) { 
                    met_name = ''; $(el_met_name).val(""); $(el_met_id).val("");
                }
            });            
        }

        function SetMetOptHack() {
            $(el_met_opt_name).autocomplete({
				html: true,
				appendTo: edit_div,
                source: function (request, responce) {
                    $.post('index.php', { q: 'metrics/find', term: request.term },
                    function (rsp, textStatus) {
                        if (rsp.errcode) {
                            if (rsp.errcode == '999') { alert(rsp.errmess); }
                            else app.alert('AlertDlg', 'Ошибка', rsp.errmess, 'app-icon-stop32');
                            responce();
                            return;
                        }
                        if (rsp.data) {
                            responce($.map(rsp.data, function (item) {
                                return { label: item.name + ' ( '+item.full+' )', 
										value:item.value, name:item.name }
                            }));
                            return;
                        }
                        responce();
                    }, 
                    'json');
                },
                minLength: 1, autoFocus: true,
                focus: function (event, ui) { return false; },
                select: function (event, ui) {
                    $(el_met_opt_id).val(ui.item.value);
                    met_opt_name = ui.item.name.replace(/<(b|\/b)>/g,'');
                    $(el_met_opt_name).val(met_opt_name);
                    return false;
                }
            });
			met_opt_name = $(el_met_opt_name).val();
            $(el_met_opt_name).bind( 'focusout', function () {
				if( $(el_met_opt_name).val() != met_opt_name ) {
                    met_opt_name = ''; $(el_met_opt_id).val(""); $(el_met_opt_name).val('');
				}
            });            
        }

		function MoveToOtherLeaf() {
			var newleaf_id = '0';
			var rowlist = gritab.getGridParam('selarrrow').toString();
			if( !rowlist ) { selRowPlease(); return; }
			
			var lsel_id = area_id+'_LeafSel';
			
			$('body').append( '<div id="'+lsel_id+'"></div>' );
			var aldlg = $('#' + lsel_id);
			
			aldlg.dialog({
				modal: true, title: 'Выберите место для перемещения',
				height: 300, width: 350, minHeight:200, minWidth: 250,
				closeOnEscape: true,
				autoOpen: false,
				buttons: [ 
					{ text: "Выбрать", icons:{primary: "ui-icon-disk"}, click: function() {
							$( this ).dialog( "close" );
							moveRecords(); gritab.trigger("reloadGrid");
						} 
					},
					{ text: "Отменить", icons:{primary: "ui-icon-close"}, click: function() { 
							$( this ).dialog( "close" ); 
						} 
					}
				],
				open: function () { 
					$('div[aria-describedby="' + lsel_id + '"]').shadow(); 
					CreateTree();
				},
				close: function () {
					aldlg.empty();
					aldlg.dialog("destroy");
					aldlg.remove();
				}
			});

			this.Close = function() { aldlg.dialog('close'); };
			aldlg.dialog('open');
		
			function CreateTree() {
				aldlg.dynatree({
					clickFolderMode: 1,
					initAjax: {	url: "index.php", data: { q: "unitree/gettree" } },
					onClick: function(node, event) {
						if( node.hasChildren() && node.getEventTargetType(event) == "title"){ node.toggleExpand(); }
						return true;
					},			
					onActivate: function(node) { newleaf_id = node.data.key;	},
					onPostInit: function( isReload ) {
						if( !isReload ) {
							var node = aldlg.dynatree("getActiveNode");
							if( node ) node.deactivate();
						}
					}
				});
			}
			
			function moveRecords() {
				if( newleaf_id == '0' ) {
					app.alert('AlertDlg', 'Ошибка', 
						"Для перемещения записей выберите их новое место размещения", 'app-icon-stop32');
					return;
				}
				
                $.post('index.php', { q: 'unity/move', rows: rowlist, leaf_id: newleaf_id } )
				.done( function (rsp, textStatus) {
						if( typeof rsp != 'object' ) rsp = $.parseJSON(rsp);
						if (rsp.errcode) {
							if (rsp.errcode == '999') { alert(rsp.errmess); return; }
							app.alert('AlertDlg', 'Ошибка', rsp.errmess, 'app-icon-stop32');
						}						
                })
				.fail( function() {
						app.alert('AlertDlg', 'Ошибка', "Ошибка взаимодействия с сервером. Повторите попытку.", 'app-icon-stop32');
				});
			}
		} // End of MoveToOtherLeaf
		
		this.Destroy = function() {
			gritab.GridDestroy(vdiv);
			area.find('*').remove();
		};
		this.Resize = function() {
			gritab.setGridWidth( area.innerWidth() - 2 );
			gritab.setGridHeight( area.innerHeight() - 75 );
		};
		this.Refresh = function() { gritab.trigger("reloadGrid"); };

    };  // End of create function definition


    app.ShowUniTreeDictionary = function (dlgID) {
        var oTab;
        var aldlg = $('#' + dlgID);

        if ($('#' + dlgID + 'Tab').length) return;
		
		var me = this;
		aldlg.dialog(
		{
			modal: false, title: 'Справочник материалов и комплектующих',
			height: 500, width: 1050, minHeight:326, minWidth:1050,
			closeOnEscape: true,
			autoOpen: false,
			resizable: true,
			resize: function( e, ui ) { 
				oTab.Resize(); 
			},
			open: function () { 
				aldlg.load('index.php', {q:'unitree'}, createDialogContent );
				$('div[aria-describedby="' + dlgID + '"]').shadow(); 
			},
			close: function () {
				aldlg.empty();
				if (oTab) oTab.Destroy();
				aldlg.dialog("destroy");
			}
		});

		this.Close = function() { aldlg.dialog('close'); };
		aldlg.dialog('open');
		
		function stripHtml(str) { return jQuery('<div />', { html: str }).text(); }
		
		function createDialogContent() {
			var dtree = aldlg.find("#uni_tree_list");
			var oDtree, rootNode;
			var ins = aldlg.find("#uni_tree_insert");
			var upd = aldlg.find("#uni_tree_update");
			var del = aldlg.find("#uni_tree_delete");
			var clr = aldlg.find("#uni_tree_clear");
			var desc = aldlg.find("#uni_tree_descrip");
			
			$.ui.dynatree.nodedatadefaults["icon"] = false;
			leaf_id = '0';
			
// Получить список изделий
			dtree.dynatree({
				clickFolderMode: 1,
				initAjax: {
					url: "index.php",
					data: { q: "unitree/gettree" }
				},
				onCreate: function(node, nodeSpan) {
					if( typeof node.data.errcode != 'undefined' ) {
                        app.alert('AlertDlg', 'Ошибка', node.data.errmess, 'app-icon-stop32', me.Close );					
					}
				},
				onClick: function(node, event) {
					// Disable node
					if( node.data.key == "new_leaf" ) return false;
					// Hack for leaf expanding too 
					if( node.hasChildren() && node.getEventTargetType(event) == "title"){ node.toggleExpand(); }
					return true;
				},			
				onActivate: function(node) {
					leaf_id = node.data.key;
					if(leaf_id != '0' ) desc.val(node.data.title);
					else desc.val('');
					
					oTab.Refresh();
				},
				onPostInit: function( isReload ) {
					if( !isReload ) {
						var node = dtree.dynatree("getActiveNode");
						if( node ) node.deactivate();
					}
				},
				dnd: {
					autoExpandMS: 2000,
					preventVoidMoves: true, // Prevent dropping nodes 'before self', etc.
			
					onDragStart: function(node) { return true; },
					onDragStop: function(node) {},
					onDragEnter: function(node, sourceNode) { return true; },
					onDragOver: function(node, sourceNode, hitMode) {
									if(node.isDescendantOf(sourceNode)){ return false; }
								},
					onDrop: function(node, sourceNode, hitMode, ui, draggable) {
								sourceNode.move(node, hitMode);
								if( sourceNode.data.key != node.data.key ) {
									var nkey = node.data.key;
									var treeMenu = oDtree.toDict();		
									
									dtree.dynatree("disable");
									$.post('index.php', { 
										q: 'unitree/move', 
										dtr_tree: JSON.stringify(treeMenu.children), 
									} )
									.done( function (rsp, textStatus) {
											if( typeof rsp != 'object' ) rsp = $.parseJSON(rsp);
											if (rsp.errcode) {
												if (rsp.errcode == '999') { alert(rsp.errmess); return; }
												app.alert('AlertDlg', 'Ошибка', rsp.errmess, 'app-icon-stop32');
												oDtree.reload();
												oDtree.activateKey(nkey);							
											}
										}
									)
									.fail( function() {
										app.alert('AlertDlg', 'Ошибка', "Ошибка взаимодействия с сервером. Повторите попытку.", 'app-icon-stop32');
										oDtree.reload();
										oDtree.activateKey(nkey);							
										}
									)								
									.always( function() { dtree.dynatree("enable"); } );
								}
							},
					onDragLeave: function(node, sourceNode) {}
				}
			});
			
			oDtree = dtree.dynatree("getTree");
			rootNode = dtree.dynatree("getRoot");
						
// Добавить новое группу/подгруппу
// Ф-ция создает новую группу с ключем "new_leaf" и добавляет ее к дереву.
// На стороне ссервера этот ключ должен быть заменен на реальный и возвращен.
// Полученный ключ присваивается группе.
			ins.button({icons:{primary: "ui-icon-plus"}});
			ins.click(function() { 
				var title = stripHtml( desc.val() );
				if( title == '' ) {
					app.alert('AlertDlg', 'Опс-с-с !!!', 'Пожалуйста. Укажите название группы/подгруппы.', 'app-icon-stop32');
					return false;
				}
				var node = dtree.dynatree("getActiveNode");
				if( !node ) node = rootNode;

				var nkey = node.data.key;
				var childNode = node.addChild({
					title: title,
					isFolder: false,
					key: "new_leaf"
				});

				var treeMenu = oDtree.toDict();
				
				dtree.dynatree("disable");
                $.post('index.php', { 
					q: 'unitree/insert', 
					dtr_tree: JSON.stringify(treeMenu.children), 
					dtr_okey: childNode.data.key 
				} )
				.done( function (rsp, textStatus) {
						if( typeof rsp != 'object' ) rsp = $.parseJSON(rsp);
						if (rsp.errcode) {
							if (rsp.errcode == '999') { alert(rsp.errmess); return; }
							app.alert('AlertDlg', 'Ошибка', rsp.errmess, 'app-icon-stop32');
							oDtree.reload();
							oDtree.activateKey(nkey);							
							return;
						}
						if (typeof rsp.key != 'undefined' ) {
							childNode.data.key = String(rsp.key);
							if( !node.isExpanded() ) node.expand(true);
						}						
                    }
				)
				.fail( function() {
						app.alert('AlertDlg', 'Ошибка', "Ошибка взаимодействия с сервером. Повторите попытку.", 'app-icon-stop32');
						oDtree.reload();
						oDtree.activateKey(nkey);							
					}
				)
				.always( function() { dtree.dynatree("enable"); } );
			});
		
// Изменить название группы
			upd.button({icons:{primary: "ui-icon-pencil"}});
			upd.click(function() { 
				var title = stripHtml( desc.val() );
				if( title == '' ) {
					app.alert('AlertDlg', 'Опс-с-с !!!', 'Пожалуйста. Укажите название группы/подгруппы.', 'app-icon-stop32');
					return false;
				}
				var node = dtree.dynatree("getActiveNode");
				
				if( !node || node.data.key == '0' || node.data.title == title ) { return; }
				node.data.title = title;
				node.render();
				
				var nkey = node.data.key;
				var rootMenu = oDtree.toDict();		
				
				dtree.dynatree("disable");
                $.post('index.php', { 
					q: 'unitree/update', 
					dtr_tree: JSON.stringify(rootMenu.children)	
				} )
				.done( function (rsp, textStatus) {
						if( typeof rsp != 'object' ) rsp = $.parseJSON(rsp);
						if (rsp.errcode) {
							if (rsp.errcode == '999') { alert(rsp.errmess); return; }
							app.alert('AlertDlg', 'Ошибка', rsp.errmess, 'app-icon-stop32');
							oDtree.reload();
							oDtree.activateKey(nkey);							
						}
                    }
				)
				.fail( function() {
						app.alert('AlertDlg', 'Ошибка', "Ошибка взаимодействия с сервером. Повторите попытку.", 'app-icon-stop32');
						oDtree.reload();
						oDtree.activateKey(nkey);							
					}
				)
				.always( function() { dtree.dynatree("enable"); } );
			});
		
// Удалить группу
			del.button({icons:{primary: "ui-icon-trash"}});
			del.click( function() { 
				var node = dtree.dynatree("getActiveNode");
				if( !node || node.data.key == "0" ) {	return;	}
				// Анализ наличия материалов в группе/подгруппе делается на стороне сервера

				app.confirm('AlertDlg', 'Требуется подтверждение', 'Удалить выделенную группу/подгруппу ?', 
						'app-icon-quest32', delLeaf, node );
			});
			
			function delLeaf( node ) {
				var nkey = node.data.key;
				node.remove();
				
				var treeMenu = oDtree.toDict();
				dtree.dynatree("enable");
                $.post('index.php', { 
					q: 'unitree/delete', 
					dtr_tree: JSON.stringify(treeMenu.children), 
					dtr_okey: nkey 
				} )
				.done( function (rsp, textStatus) {
						if( typeof rsp != 'object' ) rsp = $.parseJSON(rsp);
						if (rsp.errcode) {
							if (rsp.errcode == '999') { alert(rsp.errmess); return; }
							app.alert('AlertDlg', 'Ошибка', rsp.errmess, 'app-icon-stop32');
							oDtree.reload();
							oDtree.activateKey(nkey);							
							return;
						}
						desc.val('');
						leaf_id = '0';
						oTab.Refresh();
                    }
				)
				.fail( function() {
						app.alert('AlertDlg', 'Ошибка', "Ошибка взаимодействия с сервером. Повторите попытку.", 'app-icon-stop32');
						oDtree.reload();
						oDtree.activateKey(nkey);							
					}
				)
				.always( function() { dtree.dynatree("enable"); } );
			}
			
// Показать все
			clr.button();
			clr.click( function() { 
				var node = dtree.dynatree("getActiveNode");
				desc.val('');
				leaf_id = '0';
				if( node ) node.deactivate();
				oTab.Refresh();				
			});
			
			oTab = new GetUniLeaf("uni_tree_leafdata", me);
		}
    }
});
